package utilities;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateHelper {
	/**
	 * Zet datum String om in een Calendar object
	 * 
	 * @param input
	 *            String in het formaat 31-01-1999 (dd-mm-yyyy)
	 * @return Calendar object
	 * @throws ParseException
	 */
	public static Calendar converteerStringNaarDatum(String input) throws ParseException,IllegalArgumentException {
		Date strdate = null;
		if(input == null || input.isEmpty()){
			throw new IllegalArgumentException("Datum en of tijd kan niet leeg zijn");
		}
		SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
		sdf.setLenient(false);
		Calendar rtrn;

		strdate = sdf.parse(input);

		rtrn = Calendar.getInstance();
		rtrn.setTime(strdate);
		return rtrn;
	}
	
	/**
	 * Zet datum + tijd String om in een Calendar object
	 * 
	 * @param input
	 *            String in het formaat 31-01-1999 (dd-mm-yyyy)
	 * @return Calendar object
	 * @throws ParseException
	 */
	public static Calendar converteerStringNaarDatum(String inputDatum, String inputTijd) throws ParseException,IllegalArgumentException {
		Date strdate = null;
		if(inputDatum == null || inputDatum.isEmpty() ||inputTijd == null || inputTijd.isEmpty()){
			throw new IllegalArgumentException("Datum en of tijd kan niet leeg zijn");
		}
		SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm");
		sdf.setLenient(false);
		Calendar rtrn;

		strdate = sdf.parse(inputDatum + " " + inputTijd);

		rtrn = Calendar.getInstance();
		rtrn.setTime(strdate);
		return rtrn;
	}

	/**
	 * Zet calendar om naar leesbare datum notatie dd-mm-yyyy
	 * 
	 * @param input
	 *            Calendar object
	 * @return String, in het formaat 31-01-1999
	 * @throws ParseException
	 */
	public static String converteerDatumNaarString(Calendar input) {
		SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
		return sdf.format(input.getTime());
	}
	
	/**
	 * Zet calendar om naar leesbare tijd notatie hh:mm
	 * 
	 * @param input
	 *            Calendar object
	 * @return String, in het formaat 23:53
	 * @throws ParseException
	 */
	public static String converteerTijdNaarString(Calendar input) {
		SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
		return sdf.format(input.getTime());
	}

	/**
	 * Vergelijkt twee datum periodes
	 * 
	 * @param startDatum1
	 * @param eindDatum1
	 * @param startDatum2
	 * @param eindDatum2
	 * @return true; periodes overlappen, false; periodes overlappen elkaar niet
	 * TODO: klopt waarschijnlijk nog niet helemaal, wanneer een datum volledig binnen de ander valt.
	 */
	public static boolean overlappenDezeDatums(Calendar startDatum1,
			Calendar eindDatum1, Calendar startDatum2, Calendar eindDatum2) {
		if ((startDatum1.after(startDatum2) && startDatum1.before(eindDatum2))
				|| (eindDatum1.after(startDatum2) && eindDatum1
						.before(eindDatum2))
				|| (eindDatum1.equals(eindDatum2) || startDatum1
						.equals(startDatum2))) {
			return true;
		}
		return false;
	}
}
